/*
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is the FxStruts MailReader Application.
 *
 * The Initial Developer of the Original Code is
 * Anirudh Sasikumar (http://anirudhs.chaosnet.org/).
 * Portions created by the Initial Developer are Copyright (C) 2008
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
*/

package com.adobe.mailreader.business
{
    import com.adobe.cairngorm.business.ServiceLocator;
    
    import mx.rpc.AsyncToken;
    import mx.rpc.IResponder;

    /* Delegate for account creation and editing */
    public class AccountCreateEditDelegate
    {
        public function AccountCreateEditDelegate(responder:IResponder)
        {			
            this.service = ServiceLocator.getInstance().getHTTPService("service");
            this.responder = responder;			
        }
        
        /* create the object which will be sent as form parameters to
         * the server */
        private function createUserObject(user:String, pass:String, 
                                          pass2:String,fName:String, 
                                          fromAddr:String, replyAddr:String, 
                                          taskData:String, token:String):Object
        {
            var obj:Object;
            
            if ( token == null )
            {
                obj = {task:taskData, username: user, password: pass,
                       password2: pass2, fullName: fName, fromAddress: fromAddr, replyToAddress: replyAddr
                };
            }
            else
            {
                obj = {"org.apache.struts.taglib.html.TOKEN": token, task:taskData, username: user, password: pass,
                       password2: pass2, fullName: fName, fromAddress: fromAddr, replyToAddress: replyAddr
                };
            }
            
            return obj;
        }
        
        /* account creation */
        public function createAccount(user:String, pass:String, pass2:String, fName:String,
                                      fromAddr:String, replyAddr:String, token:String):void
        {
            var obj:Object = createUserObject(user, pass, pass2, fName, fromAddr, replyAddr, "Create", token);
            service.url = "SaveRegistration.do";			
            service.numObjects = 1;            
            var call:AsyncToken = service.send(obj);
            call.addResponder(responder);
        }
        
        /* account edit */
        public function editAccount(user:String, pass:String, pass2:String,
                                    fName:String, 
                                    fromAddr:String, replyAddr:String, token:String):void
        {
            var obj:Object = createUserObject(user, pass, pass2, fName, fromAddr, replyAddr, "Edit", token);
            service.url = "SaveRegistration.do";
            service.numObjects = 1;            
            var call:AsyncToken = service.send(obj);
            call.addResponder(responder);
        }

        /* Because of use of saveToken() and validateToken() on the
         * struts side, the edit page has to be visited before a
         * save. Most commands extract the token obtained from this
         * call for use with the actual create or edit service
         * call.  */
        public function confirmAccount():void
        {
            service.url = "EditRegistration.do";
            service.numObjects = 1;            
            var call:AsyncToken = service.send({fortoken: true});
            call.addResponder(responder);
        }
        
        private var responder: IResponder;
        private var service: Object;
        
    }
}